import { autoUpdater } from "electron-updater";
import { ipcMain } from "electron";

export function initUpdateIpc(mainWindow) {
  const log = require("electron-log");
  log.transports.file.level = "debug";
  autoUpdater.logger = log;
  // 是否自动更新，如果为true，当可以更新时(update-available)自动执行更新下载。
  autoUpdater.autoDownload = true;
  autoUpdater.autoInstallOnAppQuit = true;
  autoUpdater.autoRunAppAfterInstall = true;

  // 1. 在渲染进程里触发获取更新，开始进行更新流程。 (根据具体需求)
  ipcMain.on("check-update", () => {
    autoUpdater.checkForUpdates();
  });

  autoUpdater.on("error", function (error) {
    mainWindow.webContents.send("update-error", error);
  });

  // 2. 开始检查是否有更新
  autoUpdater.on("checking-for-update", function () {});

  // 3. 有更新时触发
  autoUpdater.on("update-available", function (info) {
    // 4. 告诉渲染进程有更新，info包含新版本信息
    mainWindow.webContents.send("update-available", info);
  });

  autoUpdater.on("update-not-available", function (info) {
    mainWindow.webContents.send("update-not-available", info);
  });

  // 7. 收到确认更新提示，执行下载
  ipcMain.on("to-update", () => {
    autoUpdater.downloadUpdate();
  });

  // 8. 下载进度，包含进度百分比、下载速度、已下载字节、总字节等
  // ps: 调试时，想重复更新，会因为缓存导致该事件不执行，下载直接完成，可找到C:\Users\111\AppData\Local\xxx-updater\pending下的缓存文件将其删除
  autoUpdater.on("download-progress", function (progressObj) {
    mainWindow.webContents.send("download-progress", progressObj);
  });

  // 10. 下载完成，告诉渲染进程，是否立即执行更新安装操作
  autoUpdater.on("update-downloaded", function () {
    mainWindow.webContents.send("update-downloaded");
    // 12. 立即更新安装
    ipcMain.on("update-now", () => {
      autoUpdater.quitAndInstall(true, true);
    });
  });
}
